// 导入 dio 库，用于处理网络请求和响应
import 'package:dio/dio.dart';
// 导入自定义的 BaseModel 类，用于解析响应数据
import 'package:flutterDemo/http/base_model.dart';

/// ResponseInterceptor 类继承自 Interceptor，用于拦截和处理网络响应
class ResponseInterceptor extends Interceptor {
  /// 重写 onResponse 方法，在响应返回时进行处理
  ///
  /// [response] 是网络请求的响应对象
  /// [handler] 是响应拦截器的处理程序，用于继续处理响应或拒绝响应
  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    // 检查响应的状态码是否为 200，表示请求成功
    if (response.statusCode == 200) {
      try {
        // 将响应数据解析为 BaseModel 对象
        var rsp = BaseModel.fromJson(response.data);
        // 检查解析后的对象的 errorCode 是否为 0，表示业务逻辑成功
        if (rsp.errorCode == 0) {
          // 检查解析后的对象的 data 是否为空
          if (rsp.data == null) {
            handler.next(
                Response(requestOptions: response.requestOptions, data: true));
            // showToast("数据为空");
          } else {
            handler.next(Response(
                requestOptions: response.requestOptions, data: rsp.data));
          }
        } else if (rsp.errorCode == -1001) {
          // 如果需要登录，拒绝响应并抛出 DioException，提示 "未登录"
          handler.reject(DioException(
              requestOptions: response.requestOptions, message: "未登录"));
        } else if (rsp.errorCode == -1) {
          print(rsp.errorMsg ?? "");
          if (rsp.data == null) {
            handler.next(
                Response(requestOptions: response.requestOptions, data: false));
            // showToast("数据为空");
          } else {
            handler.next(Response(
                requestOptions: response.requestOptions, data: rsp.data));
          }
        }
      } catch (e) {
        // 如果解析过程中出现异常，拒绝响应并抛出 DioException，提示异常信息
        handler.reject(DioException(
            requestOptions: response.requestOptions, message: "$e"));
      }
    } else {
      // 如果响应的状态码不是 200，拒绝响应并抛出 DioException
      handler.reject(DioException(
        requestOptions: response.requestOptions,
      ));
    }
  }
}
